/* eslint-disable eqeqeq */
import api from '../../api';
import { message } from 'antd';
import { getTreebyKey } from '../../utils/utils';
import propertyTypeConfig from '../../utils/enumeratedValues/nonstandardCurveMap';

export default {
  namespace: 'nonstandardValueReviewM',

  state: {},
  effects: {
    // 获取非标估值列表-(type=1 : 市值法),(type=2 : 摊余成本法),(type=3 : 成本法)
    *getTableData({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.getTableData, payload);
      if (res && res.code == 0) {
        res.data?.columns &&
          res.data?.columns.forEach((item) => {
            if (item.key == 'assetType' || item.key == 'reviewStatus' || item.key == 'tradingCode' || item.key == 'secuabbr') {
              // 加筛选功能
              item.type = 'filterCol';
            }
            if (item.key == 'valuationPrice') {
              // 估值结果保留四位小数
              item.render = (text, record, index) => {
                if (text === null || text === undefined) {
                  return '--';
                } else if (isNaN(text)) {
                  return text;
                } else {
                  return Number(text).toFixed(4);
                }
              };
            }
          });
        res.data?.dataSource &&
          res.data?.dataSource.length &&
          res.data?.dataSource.forEach((item) => {
            // 资产类型翻译
            const data = getTreebyKey(propertyTypeConfig, item.assetType);
            item.assetType = data ? data.title : item.assetType;
            // 复核类型前端翻译
            item.reviewStatus = item.reviewStatus == '1' ? '已复核' : item.reviewStatus == '2' ? '未复核' : item.reviewStatus;
          });
        callback('success', res.data);
      } else {
        callback('fail');
        message.error(`获取非标估值列表失败，失败原因：${res?.msg}`);
        console.error(`获取非标估值列表失败，失败原因：${res?.msg}`, '接口名称： queryAcmReviewList 接口：nonstandardValuationReview/queryAcmReviewList');
      }
    },
    // 获取预期信用损失比例列表
    *getLossRatioTableData({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.getLossRatioTableData, payload);
      if (res && res.code == 0) {
        res.data?.columns &&
          res.data?.columns.forEach((item) => {
            if (item.key == 'assetType' || item.key == 'reviewStatus') {
              // 加筛选功能
              item.type = 'filterCol';
            }
            if (item.key == 'probabilityDefault' || item.key == 'lossGivenDefault' || item.key == 'expectedCreditLosses') {
              // 估值结果保留四位小数
              item.render = (text, record, index) => {
                if (text === null || text === undefined) {
                  return '--';
                } else if (isNaN(text)) {
                  return text;
                } else {
                  return Number(text).toFixed(4);
                }
              };
            }
          });
        res.data?.dataSource &&
          res.data?.dataSource.length &&
          res.data?.dataSource.forEach((item) => {
            // 资产类型翻译
            const data = getTreebyKey(propertyTypeConfig, item.assetType);
            item.assetType = data ? data.title : item.assetType;
            // 复核类型前端翻译
            item.reviewStatus = item.reviewStatus == '1' ? '已复核' : item.reviewStatus == '2' ? '未复核' : item.reviewStatus;
          });
        callback('success', res.data);
      } else {
        callback('fail');
        message.error(`获取预期信用损失比例列表失败，失败原因：${res?.msg}`);
        console.error(`获取预期信用损失比例列表失败，失败原因：${res?.msg}`, '接口名称： nonstandardECLCfgList 接口：nonstandardECL/nonstandardECLCfgList');
      }
    },
    // 更改违约概率和损失比例
    *changeRatioValue({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.changeRatioValue, payload);
      if (res && res.code == 0) {
        callback('success');
        message.success('保存成功。');
      } else {
        callback('fail');
        message.error(`更改违约概率和损失比例失败，失败原因：${res?.msg}`);
        console.error(`更改违约概率和损失比例失败，失败原因：${res?.msg}`, '接口名称： updatePdLgdById 接口：nonstandardECL/updatePdLgdById');
      }
    },
    // 预期信用损失比例的一键确认
    *ratioGroupConfirm({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.ratioGroupConfirm, payload);
      if (res && res.code == 0) {
        callback('success');
        message.success('复核成功。');
      } else {
        callback('fail');
        message.error(`预期信用损失比例复核失败，失败原因：${res?.msg}`);
        console.error(`预期信用损失比例复核失败，失败原因：${res?.msg}`, '接口名称： updateReviewStatusById 接口：nonstandardECL/updateReviewStatusById');
      }
    },
    // 更改非标标的的估值
    *changeValue({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.changeValue, payload);
      if (res && res.code == 0) {
        callback('success');
        message.success('保存成功。');
      } else {
        callback('fail');
        message.error(`更改非标标的估值失败，失败原因：${res?.msg}`);
        console.error(`更改非标标的估值失败，失败原因：${res?.msg}`, '接口名称： updateValuationPriceById 接口：nonstandardValuationReview/updateValuationPriceById');
      }
    },
    // 一键确认
    *groupConfirm({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.groupConfirm, payload);
      if (res && res.code == 0) {
        callback('success');
        message.success('复核成功。');
      } else {
        callback('fail');
        message.error(`估值复核失败，失败原因：${res?.msg}`);
        console.error(`估值复核失败，失败原因：${res?.msg}`, '接口名称： updateReviewStatusByIds 接口：nonstandardValuationReview/updateReviewStatusByIds');
      }
    },
    // 计算
    *calculateData({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.calculateData, payload);
      if (res && res.code == 0) {
        callback('success');
        message.success('计算成功。');
      } else {
        callback('fail');
        message.error(`计算失败，失败原因：${res?.msg}`);
        console.error(`计算失败，失败原因：${res?.msg}`, '接口名称： pricerTrigger/ 接口：nonstandardpricer/pricerTrigger/');
      }
    },
    // 获取租户下所有托管人名称下拉
    *queryCustodianList({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.queryCustodianList, payload);
      if (res && res.code == 0) {
        callback(res.data || []);
      } else {
        callback();
        message.error(res?.msg || '查询租户下所有托管人下拉列表失败！');
      }
    },

    // 更新未读消息
    *updateUnreadDate({ payload }, { call, put }) {
      const res = yield call(api.updateUnreadDate, payload);
      if (!res || res.code != 0) {
        message.error(`更新未读消息失败，失败原因：${res?.msg}`);
      }
    },
    // 发送托管人
    *postList({ payload, callback }, { call, put }) {
      const res = yield call(api.nonstandardValueReview.postList, payload);
      if (res && res.code == 0) {
        callback();
        message.success('托管行均发送成功！');
      } else {
        message.error(res?.msg || '发送托管人失败!');
      }
    },
  },

  reducers: {
    save(state, { payload }) {
      return {
        ...state,
        ...payload,
      };
    },
  },
};
